EN FR
EN FR


Section: Software

Rascal

Participants : Paul Klint, Jurgen Vinju [correspondent] , Tijs van der Storm, Bas Basten, Jeroen van den Bos, Mark Hills, Bert Lisser, Arnold Lankamp, Atze van der Ploeg, Vadim Zaytsev, Anastasia Izmaylova, Anya Helene Bagge.

Characterization:

A5, SO-4, SM-4, EM-4, SDL-4-up5, OC-DA-3-CD-3-MS-3-TPM-3.

WWW:

http://www.rascal-mpl.org

Objective:

Provide a completely integrated programming language parametric meta programming language for the construction of any kind of meta program for any kind of programming language: analysis, transformation, generation, visualization.

Users:

Researchers in model driven engineering, programming languages, software engineering, software analysis, as well as practitioners that need specialized tools.

Impact:

Rascal is making the mechanics of meta programming into a non-issue. We can now focus on the interesting details of the particular fact extraction, model, source analysis, domain analysis as opposed to being distracted by the engineering details. Simple things are easy in Rascal and complex things are manageable, due to the integration, the general type system and high-level programming features.

Competition:

There is a plethora of meta programming toolboxes and frameworks available, ranging from plain parser generators to fully integrated environments. Rascal is distinguished because it is a programming language rather than a specification formalism and because it completely integrates different technical domains (syntax definition, term rewriting, relational calculus). For simple tools, Rascal competes with scripting languages and for complex tools it competes context-free general parser generators, with query engines based on relational calculus and with term rewriting and strategic programming languages.

Engineering:

Rascal is about 100 kLOC of Java code, designed by a core team of three and with a team of around 8 phd students and post-docs contributing to its design, implementation and maintenance. The goal is to work towards more bootstrapping and less Java code as the project continues.

Publications:

[21] , [28] , [29] , [22] [6] , [7]

Novelties

  • Re-design of embedded grammar formalism including semantic disambiguation facilities.

  • Extremely fast top-down context-free general parsing algorithm in cubic time and space.

  • Parse error reporting via partial parse trees (useful in incremental syntax highlighting and incremental type analysis).

  • Auto-indent feature for code generation templates.

  • Significant extensions and improvements of software visualization library, such as hierarchical graphs and smaller set of more powerful primitives for charts and inter-active features.

  • Significant improvements to online documentation and inter-active tutor environment.

  • “ToLaTex” mode to include Rascal code in papers.

  • ShellExec library for inter-acting via pipes with external programs

  • Bridge to Maude and K.

  • Generalized function dispatch to arbitrary pattern dispatch.

  • New module composition mechanism “extend” next to “import”.

  • Ambiguity diagnostics library and parse tree visualizations as a first step towards more grammarware in the IDE.

  • A command-line interface to run a single Rascal program.

  • Fixed a number of memory leaks in the IDE.

  • IDE features for mixed Java/Rascal projects.

  • Rational numbers.

  • Formal concept analysis library.

  • Enhanced SDF2 to Rascal translation.

  • Redesigned and simplified abstract grammar format.

  • Added “break”, “continue” and “fail” statements for back-tracking and continuation control.

  • Radically changed internal design from Visitor to Interpreter design pattern (using an automated refactoring).